package com.example.algorithm.huawei_rongyao_29;

// 小红的ABC，其实就是找最短的回文字段。
// 难度：简单
// 关联题：PalindromeChecker

import java.util.Scanner;

/**
 * 小红想知道，这个字符串最短的、长度超过 1 的回文子串的长度是多少？注意，人家是找最短的，不是最长的。
 * 子串定义：字符串取一段连续的区间。例如"abcca"的子串有"ab"、"bcca"等，但"aca"则不是它的子串。
 * 回文的定义：一个字符串正着读和倒着读都是相同的，那么定义它的回文的。
 * <p>
 * 从左右两端开始比较字符串的字符，找到第一个不相等的字符。
 * 如果找到了不相等的字符，那么该字符的前一个字符和后一个字符必须与它相同才能形成回文子串。
 * 如果找到了相等的字符，则继续向中间移动，直到找到不相等的字符或者到达字符串的中间位置。
 * 如果找到了符合条件的字符，返回其长度；如果找不到符合条件的字符，则返回 -1。
 * <p>
 * 输入描述:
 * 一个只包含 'a' , 'b' , 'c' 三种字符的字符串。
 * 数据范围：字符串长度不小于2，且不超过100
 * <p>
 * 输出描述:
 * 如果不存在长度超过1的回文子串，则输出-1。
 * 否则输出长度超过1的最短回文子串的长度。
 * <p>
 * 示例1
 //String s = "abcca";  2
 //String s = "abcac";  3
 //String s = "bbcac";  2
 //String s = "cacac";  3
 */
public class Q15_ShortestPalindromeSubstring {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int result = shortestPalindromeSubstringLength(s);
        System.out.println(result);
    }

    // 找到最短的长度超过1的回文子串的长度
    public static int shortestPalindromeSubstringLength(String s) {
        int n = s.length();
        // Integer.MAX_VALUE 是 Java 中 int 类型的最大值。它的值是 2^31 - 1，即 2147483647。
        int minLength = Integer.MAX_VALUE;

        // 检查每一个可能的子串，长度从2开始。之所以是2因为2是可能子串中最小的长度
        for (int length = 2; length <= n; length++) {
            for (int start = 0; start <= n - length; start++) {
                String substring = s.substring(start, start + length);
                if (isPalindrome(substring)) {
                    minLength = Math.min(minLength, length);
                }
            }
        }
        // minLength初始值没被替换就说明没找到任何一个长度的回文子串。那么，转换为返回-1
        return minLength == Integer.MAX_VALUE ? -1 : minLength;
    }

    // 检查字符串是否是回文
    // 这个之前已经写过，很简单，就是左右两个指针首尾相互夹。
    // 可以确定的是，left < right是必然成立的，它们不会重合。所以用这个作为while条件再合适不过了。
    public static boolean isPalindrome(String s) {
        int left = 0;
        int right = s.length() - 1;
        while (left < right) {
            if (s.charAt(left) != s.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}


